home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / x68000.arc / SIEVE.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  2KB  |  53 lines

  1. ***********************************************
  2. *
  3. *       sieve of eratosthenes
  4. *
  5. *       flags:     a0       ;pointer to array
  6. *       iter:      d0
  7. *       count:     d1
  8. *       i:         d2
  9. *       prime:     d3
  10. *       k:         d4
  11. *
  12. ***********************************************
  13.  
  14.         org     $1000
  15. size    equ     8191            ;array size
  16. flags   ds      size            ;array of boolean
  17. iter    equ     10              ;10 iterations
  18. TRUE    equ     %00000001       ;
  19. FALSE   equ     %00000000       ;
  20. tutor   equ     228             ;return to OS
  21.  
  22.         org     $3000
  23. start   move    #iter,d0        ;set max iterations
  24.         movea.l #flags,a0       ;point to flags
  25. again   moveq   #0,d1           ;count <-- 0
  26.         moveq   #0,d2           ;i <-- 0
  27. setflg  move.b  #TRUE,0(a0,d2)  ;flags[i] <-- TRUE
  28.         addq    #1,d2           ;i <-- i + 1
  29.         cmp     #size,d2        ;i > size?
  30.         ble.s   setflg          ;
  31.         moveq   #0,d2           ;i <-- 0
  32. next    cmpi.b  #TRUE,0(a0,d2)  ;flags[i] = TRUE?
  33.         bne.s   notrue          ;
  34.         move    d2,d3           ;prime <-- i + i + 3
  35.         add     d2,d3           ;
  36.         addq    #3,d3           ;
  37.         move    d2,d4           ;k <-- i + prime
  38.         add     d3,d4           ;
  39. more    cmp     #size,d4        ;k <= size?
  40.         bgt.s   nxtcnt          ;
  41.         move.b  #FALSE,0(a0,d4) ;
  42.         add     d3,d4           ;k <-- k + prime
  43.         bra.s   more            ;
  44. nxtcnt  addq    #1,d1           ;count <-- count + 1
  45. notrue  addq    #1,d2           ;i <-- i + 1
  46.         cmp     #size,d2        ;i > size?
  47.         ble.s   next            ;
  48.         subq    #1,d0           ;iter <-- iter - 1
  49.         bne     again           ;last iteration?
  50.         move    #tutor,d7       ;escape to supervisor
  51.         trap    #14             ;
  52.         end
  53.